'''
从有序列表的初始候选区li[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使
候选区减少一本
'''
def binery_search(li,val):
    L , R = 0 , len(li)-1
    while L <= R:
        mid = (L + R) // 2
        if li[mid] == val:
            return mid
        elif li[mid] > val:
            R = mid - 1
        else:
            L = mid + 1
    else:
        return None

li = [1,2,3,4,5,6,7,8,9]
print(binery_search(li,3))
'''
while 条件:
    # 循环体
else:
    # 当循环正常结束（未被 break 中断）时执行
    '''
'''
while L <= R:        # 1. 当搜索区间有效时循环
    ...
    if li[mid] == val: 
        return mid    # 2. 找到目标 → 直接返回（相当于隐式 break）
else:                # 3. 循环未被中断（即未找到目标）时触发
    return None
'''
'''
等价写法
while L <= R:
    ...
    if li[mid] == val:
        return mid    # 找到时立即退出
# 循环结束仍未找到 ↓
return None           # 直接放在循环外部
'''